
package com.insigma.business.qrcode.soldier.dao;

import com.insigma.business.qrcode.common.annotation.Crypt;
import com.insigma.business.qrcode.soldier.entity.DataStatsCDO;
import com.insigma.business.qrcode.soldier.entity.SoldierDifficultyFullInfoDO;
import com.insigma.business.qrcode.soldier.request.SoldierDifficultyRegistrationInfoBSearcher;
import org.apache.ibatis.annotations.Param;
import com.insigma.business.qrcode.soldier.entity.SoldierDifficultyRegistrationInfoDO;

import java.util.List;


@Crypt(decryptFields = {"idCardNo", "", ""})
public interface SoldierDifficultyRegistrationInfoDao {

    
    List<SoldierDifficultyRegistrationInfoDO> search(final SoldierDifficultyRegistrationInfoBSearcher innerSearcher);

    @Crypt(returnDecrypt = true, returnDecryptFields ={"idCardNo", "mobile", ""})
    List<SoldierDifficultyFullInfoDO> searchFull(final SoldierDifficultyRegistrationInfoBSearcher innerSearcher);

    
    SoldierDifficultyRegistrationInfoDO get(final String id);

    
    Integer insert(final SoldierDifficultyRegistrationInfoDO soldierDifficultyRegistrationInfoDO);

    
    Integer update(final SoldierDifficultyRegistrationInfoDO soldierDifficultyRegistrationInfoDO);

    
    Integer delete(@Param("id") final String id,
                   @Param("modifierType") final String modifierType,
                   @Param("modifierId") final String modifierId);

    @Crypt(encryptParamIndex = {0})
    List<SoldierDifficultyRegistrationInfoDO> getByIdCardNo(String idCardNo);

    Integer countBySituation(@Param("cutdAreaCode")String cutdAreaCode, @Param("situation")String situation);

    Integer countByAreaAndSource(@Param("adminAreaCode")String adminAreaCode, @Param("source")String source);

    List<DataStatsCDO> groupDifficultySoldierMap(@Param("areaLike")String areaLike, @Param("nextLevel")int nextLevel, @Param("levelLength")int levelLength);
}
